import yaml
import json
from configparser import ConfigParser
from commonon.logger import logger

class MyConfigParser(ConfigParser):
    # 重写 configparser 中的 optionxform 函数，解决 .ini 文件中的 键option 自动转为小写的问题
    def __init__(self, defaults=None):
        ConfigParser.__init__(self, defaults=defaults)

    def optionxform(self, optionstr):
        return optionstr

class ReadFileData():
    '''读取文件类'''

    def load_yaml(self, file_path):
        '''读取yaml文件'''
        logger.info("加载 {} 文件......".format(file_path))
        with open(file_path, 'r', encoding= "utf-8") as f:
            data = yaml.safe_load(f)
        logger.info("读到数据 ==>>  {} ".format(data))
        return data

    def load_json(self, file_path):
        '''读取json文件'''
        logger.info("加载 {} 文件......".format(file_path))
        with open(file_path, encoding= 'utf-8') as f:
            data = json.load(f)
        logger.info("读到数据 ==>>  {} ".format(data))
        return data

    def load_txt(self, file_path):
        '''读取txt文件'''
        logger.info("加载 {} 文件......".format(file_path))
        with open(file_path, "r", encoding= "utf-8") as f:
            data = f.read()
        logger.info("读到数据 ==>>  {} ".format(f))
        return data

    def load_ini(self, file_path):
        '''读取ini文件'''
        logger.info("加载 {} 文件......".format(file_path))
        config = MyConfigParser()
        config.read(file_path, encoding= "UTF-8")
        data = dict(config._sections)
        return data

class WriteFileData():

    def write_txt(self,file_path, str_demo):
        '''写入txt文件'''
        logger.info("加载 {} 文件......".format(file_path))
        with open(file_path,"w",encoding= "utf-8") as f:
            f.write(str_demo)
        logger.info("写入 {} 数据......".format(str_demo))

data = ReadFileData()
write = WriteFileData()